package com.itheima.d05_fanxing_other;

import com.itheima.hw.test3.BaoMaCar;
import com.itheima.hw.test3.BenChiCar;
import com.itheima.hw.test3.Car;
import com.itheima.hw.test5.Keyboard;
import com.itheima.hw.test5.Mouse;

import java.util.ArrayList;

/**
 * 目标：了解泛型通配符，泛型上下限
 */
public class Test {

    //                      任意类型集合
    public static void test(ArrayList<?>  list){

    }

    //                      只允许接收车集合
    public static void test2(ArrayList<? extends Car>  list){

    }


    //                      只允许接宝马车和其父类集合
    public static void test3(ArrayList<? super BaoMaCar>  list){

    }

    public static void main(String[] args) {
        //使用泛型时：可以使用通配符？
        test(new ArrayList<Car>());
        test(new ArrayList<String>());

        System.out.println("==================");

        test2(new ArrayList<BaoMaCar>());
        test2(new ArrayList<BenChiCar>());
        test2(new ArrayList<Car>());

        //test2(new ArrayList<String>());
        //test2(new ArrayList<Mouse>());
        //test2(new ArrayList<Keyboard>());

        System.out.println("==================");

        test3(new ArrayList<BaoMaCar>());
        //test3(new ArrayList<BenChiCar>());
        test3(new ArrayList<Car>());

        //test3(new ArrayList<String>());
        //test3(new ArrayList<Mouse>());
        //test3(new ArrayList<Keyboard>());


        //泛型的注意事项：
        //1.泛型编译后自动擦除
        //2.泛型不支持基本数据类型
        ArrayList<Byte> list = new ArrayList<>();
        ArrayList<Character> list2 = new ArrayList<>();
        ArrayList<Short> list3 = new ArrayList<>();
        ArrayList<Integer> list4 = new ArrayList<>();

        ArrayList<Long> list5 = new ArrayList<>();
        ArrayList<Float> list6 = new ArrayList<>();
        ArrayList<Double> list7 = new ArrayList<>();
        ArrayList<Boolean> list8 = new ArrayList<>();

        list4.add( 1 ); //1  int 自动包装成引用数据类型  Integer


    }

}
